package com.landun.market.service;

import com.landun.market.pojo.enums.StateCode;
import com.landun.market.pojo.model.Category;

import java.util.List;
import java.util.Map;

/**
 * @author jiang.chuan
 * @date 2018-05-05
 */
public interface ICategoryService {
    // 最顶级层级
    int TOP_LEVEL = 1;

    // 最顶级父品类ID
    int TOP_PARENT_ID = 0;

    /**
     * 创建品类
     *
     * @param category 品类
     * @return 创建品类成功条数
     */
    boolean create(Category category);

    /**
     * 修改品类
     *
     * @param categoryId 品类ID
     * @param category   待修改的品类
     * @return true: 修改成功，false:数据未被修改
     */
    boolean update(Integer categoryId, Category category);

    /**
     * 调整品类显示顺序
     *
     * @param topId    需要排序在前面的品类
     * @param bottomId 需要排序在后面的品类
     * @return true: 修改成功，false:数据未被修改
     */
    boolean rearrange(Integer topId, Integer bottomId);

    /**
     * 修改品类状态
     *
     * @param categoryId 品类ID
     * @return 状态变化品类成功条数
     */
    boolean changeStatus(StateCode stateCode, Integer categoryId);

    /**
     * 根据品类ID查询详情
     *
     * @param categoryId 品类ID
     * @return 品类详情
     */
    Category load(Integer categoryId);

    /**
     * 返回所有品类
     *
     * @return 品类详情列表
     */
    List<Category> findAll();

    /**
     * 根据父级ID查询详情
     *
     * @param parentId 父级ID
     * @return 品类详情列表
     */
    List<Category> findByParent(Integer parentId);

    /**
     * 根据品类IDs查询数据
     *
     * @param ids 品类IDs
     * @return 满足条件的渠道品类
     */
    Map<Integer, Category> findByIds(Integer... ids);

    /**
     * 判断品类名称是否重复
     *
     * @param name              品类全称 （全等）
     * @param existedCategoryId 需要排除的品类id
     * @return true: 品类已经存在，false: 品类不存在
     */
    boolean isNameDuplicated(String name, Integer existedCategoryId);

}
